<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!--
    Copyright 2013 James McClure

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<!--
Design by Free CSS Templates
http://www.freecsstemplates.org
Released for free under a Creative Commons Attribution 3.0 License

Name       : Singular
Description: A two-column, fixed-width design with a neutral color scheme.
Version    : 1.0
Released   : 20121119
-->
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="description" content="A Java MQTT client, Mock MQTT Broker, HTTP to MQTT gateway, and MQTT clustering proxy" />
		<meta name="keywords" content="" />
		<title>Xenqtt - A Simple and Innovative Tookit for MQTT Integration</title>
		<link rel="shortcut icon" href="images/favicon.ico">
		<link rel="stylesheet" type="text/css" href="style.css" />
		<script>
		  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
		  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
		  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
		  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
		
		  ga('create', 'UA-44597320-1', 'sourceforge.net');
		  ga('send', 'pageview');
		
		</script>
	</head>
	<body>
		<div id="wrapper">
			<div id="header">
				<img src="images/happy-minion.png" />
				<div id="logo">
					<h1><a href="index.html">XenQTT</a></h1>
				</div>
				<div id="menu">
					<ul>
						<li class="first"><a href="index.html">Home</a></li>
						<li><a href="features.html">Features</a></li>
						<li><a href="documentation.html">Documentation</a></li>
						<li><a href="http://sourceforge.net/projects/xenqtt/files">Downloads</a></li>
						<li><a href="http://sourceforge.net/p/xenqtt/tickets">Tickets</a></li>
						<li class="last"><a href="about.html">About</a></li>
					</ul>
					<br class="clearfix" />
				</div>
			</div>
			<div id="page">
				<div id="content">
					<div class="post">
						<h2>XenQTT Features</h2>
						<p>
						XenQTT includes multiple APIs and applications:
						<ul class="list">
							<li class="first"><a href="#client">Java MQTT client API</a></li>
							<li><a href="#proxy">Clustering proxy</a></li>
							<li class="last"><a href="#mockbroker">Mock MQTT Broker</a></li>
						</ul>
						</p>
					</div>
					<div class="post" id="client">
						<h3>Java MQTT Client API</h3>
						<h4>Overview</h4>
						<p>
						The XenQTT library comes with a fully-featured Java MQTT client API. This client allows applications to connect to and interact with an 
						MQTT broker. The client can be used either synchronously or asynchronously.
						</p>
						<p>
						In synchronous mode all client initiated MQTT interactions block until they complete. For example, the <code>connect</code> method will 
						not return until the CONNECT has been sent to the broker and the CONNACK has been received.
						</p>
						<p>
						The asynchronous client employs a non-blocking strategy for all messages sent to the broker. A system of callbacks are employed to keep
						the client informed of various events that arise during the dispatch of messages. The callbacks available to the client are defined in 
						the <code>AsyncClientListener</code> interface.
						</p>
						<p>
						Both synchronous and asynchronous clients receive publish messages and disconnect notifications via the MqttClientListener interface.
						</p>
						<h4>Notes and Caveats</h4>
						<p>
						At the current time only QoS 0 (at most once) and QoS 1 (at least once) are supported in the client. It is the intention of the
						XenQTT team to add QoS 2 (exactly once) support at a later time.
						</p>
					</div>
					<div class="post" id="proxy">
						<h3>Clustering Proxy</h3>
						<p>
						The Proxy allows <code>1..n</code> MQTT client applications to interact with a single MQTT broker as a single client. The proxy treats
						all clients that share the same client ID as a cluster. From the clients' perspective they are all talking with the broker. From the
						broker's perspective it is interfacing with just a single client. The Proxy makes all of this transparent to both end points.
						</p>
						<p>
						The Proxy is very useful for applications that are deployed in a cluster. Such deployments are often used to meet scaling
						and/or performance goals. Because of the nature of MQTT, if each clustered application instance connected directly to the broker they would
						either kick each other off until the last one to connect was the only one connected or they would all connect. Either scenario is bad: one client connected
						may not be able to handle scaling and performance needs and is a single point of failure while every client getting every message is not
						usually the desired behavior.
						</p>
						<p>
						The Proxy solves this problem by managing traffic between the clients and the broker. It ensures messages published to the clients
						are routed to just one client. It acts as a load balancer, distributing messages across the clients in the cluster.
						</p>
					</div>
					<div class="post post-last" id="mockbroker">
						<h3>Mock MQTT Broker</h3>
						<p>
						The mock broker is an MQTT broker that clients can connect to and interact with. The mock broker is useful for testing and
						debugging MQTT client applications. It can be run as a stand alone application for functional and limited load testing or in-memory 
						for unit and integration testing. The mock broker has a Java API to support unit and integration testing.
						</p>
						<p>
						The mock broker is a fully functional MQTT broker. It supports up to QoS 1; however, it does not provide any persistence and as such
						should not be used as a production-level MQTT broker. It's strength is in helping testing and debugging MQTT client applications.
						</p>
					</div>
				</div>
			</div>
		</div>
		<div id="footer">
			&copy; 2013 J2 Enterprises | Design by <a href="http://www.freecsstemplates.org/" rel="nofollow">FreeCSSTemplates.org</a> | Images by <a href="http://fotogrph.com/">Fotogrph</a>
		</div>
	</body>
</html>